home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************/
- /* DATABOSS MODULE: DB_SETS.C */
- /****************************************************************************/
-
- #include "db_lsc.h"
-
- #include <stdarg.h>
- #include <stddef.h>
- #include <string.h>
- #include "db_types.h"
- #include "db_sets.h"
-
- /***************************** IMPLEMENTATION *****************************/
-
- void set_make(set s,...)
- {
- va_list ap;
- byte item;
-
- memset(s,0,sizeof(set));
- va_start(ap,s);
- while ((item = (byte) va_arg(ap,int)) != 0) set_addmember(s,item);
- va_end(ap);
- }
-
- void set_strmake(set s, string items)
- {
- strptr item;
-
- memset(s,0,sizeof(set));
- item = items;
- while (*item) set_addmember(s,*(item++));
- }
-
- void set_addmember(set s, byte item)
- {
- byte indicy, bits;
-
- indicy = item/8;
- bits = (byte) (1 << (item-(8*indicy)));
- s[indicy] = s[indicy] | bits;
- }
-
- void set_add(set s,...)
- {
- va_list ap;
- byte item;
-
- va_start(ap,s);
- while ((item = (byte) va_arg(ap,int)) != 0) set_addmember(s,item);
- va_end(ap);
- }
-
- void set_delmember(set s, byte item)
- {
- byte indicy, bits;
-
- indicy = item/8;
- bits = (byte) (~(1 << (item-(8*indicy))));
- s[indicy] = s[indicy] & bits;
- }
-
- void set_del(set s,...)
- {
- va_list ap;
- byte item;
-
- va_start(ap,s);
- while ((item = (byte) va_arg(ap,int)) != 0) set_delmember(s,item);
- va_end(ap);
- }
-
- bool set_member(set s, byte item)
- {
- byte indicy, bits;
-
- indicy = item/8;
- bits = (byte) (1 << (item-(8*indicy)));
- return((bool) ((s[indicy] & bits) == bits));
- }
-
- void set_union(set s, set s1, set s2)
- {
- int i;
-
- for (i=0; i < sizeof(set); i++) s[i] = s1[i] | s2[i];
- }
-
- void set_intersection(set s, set s1, set s2)
- {
- int i;
-
- for (i=0; i < sizeof(set); i++) s[i] = s1[i] & s2[i];
- }
-
- /***************************** END OF DB_SETS.C ***************************/
-